iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 16

Day 16 KubeEdge: 指定佈署節點(NodeSelector)

  • 分享至 

  • xImage
  •  

在物聯網應用下,不同邊緣節點之間是分散的。假設有特定應用要在A場域應用,但卻被佈署到B場域上就會影響服務效能,所以讓維運人員選擇服務佈署節點也是一個很重要的功能。
接下來要介紹幾種指定容器佈署節點的方式,首先是最簡單也是我們這幾天內容中一直使用的NodeSelector。NodeSelector機制會指定節點標籤,將應用部署到符合該標籤的節點上。因此我們會需要在節點上貼標籤,並在YAML上指定nodeSelector,也就是節點需要對應到的標籤內容。

首先我們需要先在節點上放上標籤:

# kubectl label node <標籤>=<標籤名>
kubectl label nodes k8s-node02 name=k8s-node02
kubectl label nodes edge name=edge

查看一下節點標籤:

kubectl get nodes --show-labels


接著我們佈署pod至節點上,可以看到在YAML檔裡面多了nodeSelector欄位

# k8s-nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: k8s-nginx-pod
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - image: nginx:latest
    name: nginx
  nodeSelector:
    name: k8s-node02
# edge-nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: edge-nginx-pod
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - image: nginx:latest
    name: nginx
  nodeSelector:
    name: edge
kubectl apply -f k8s-nginx-pod.yaml 
kubectl apply -f edge-nginx-pod.yaml


可以看到他們被佈署到對應的節點上。
那如果節點中都沒有符合YAML中nodeSelector指定的標籤呢?這次我們將YAML稍微改一下:

# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - image: nginx:latest
    name: nginx
  nodeSelector:
    name: test
kuebctl apply -f nginx-pod.yaml

接著觀察佈署狀態:

可以看到服務無法被佈署到節點上,因為沒有符合標籤的節點;描述一下pod也可以得到相同的訊息,

kubectl describe pods nginx-pod


上一篇
Day 15 KubeEdge 服務滾動更新
下一篇
Day 17 KubeEdge 節點親和性(I)
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言